<?php

/**
 * Függvény objektum
 * 
 * Az objektum értékének első eleme a függvény neve, többi elemei a függvény paraméterei.
 * A paraméterek lehetnek string-ek, string-é alakítható objektumok, és számok.
 * 
 * Példa:
 * <code>
 * $o->set(array('count', '*'));
 * </code>
 * kimenet: COUNT(*)
 * 
 */
class XQL_Function extends XQL_Object
{
	/**
	 * Az objektum neve. Meg kell egyeznie egy sémának a nevével, amelyre illeszthető.
	 *
	 * @var string
	 */
	protected $objectName = 'function';
	
	/**
	 * Felépíti az osztályhoz tartozó sémát. Implementálása kötelező.
	 *
	 */
	protected function buildSchema()
	{
		$this->objectSchema = new XQL_FunctionSchema();
	}
	
	/**
	 * Visszatér egy példánnyal ugyanebből az osztályból.
	 *
	 * @return XQL_Function
	 */
	public static function create()
	{
		return new XQL_Function();
	}
	
	/**
	 * Kizárólag ennek az objektumnak az értékével tér vissza. Implementációja
	 * kötelező. A további megvalósításokban ügyelni kell arra, hogy az egyes
	 * érték elemek akár olyan objektumok is lehetnek, amelyek string-ként
	 * térhetnek vissza (például más XQL_Object leszármazottak).
	 *
	 * @return string
	 */
	public function get()
	{
		$params = array_values($this->objectValue);
		$function = array_shift($params);
		
		$result = strtoupper($function).'(';
		$rParams = array();
		foreach ($params as $v)
		{
			if (is_object($v))
			{
				$rParams[] = (string)$v;
			}
			else
			{
				$rParams[] = $v;
			}
		}
		
		$result .= implode(', ', $rParams).')';
		
		return $result;
	}
	
}

?>